/**
 * 自定义异常类，表示实体已存在的异常
 * 在创建或更新实体时，如果实体根据特定字段值已存在，则抛出此异常
 */
package co.yixiang.exception;

import org.springframework.util.StringUtils;

public class EntityExistException extends RuntimeException {

    /**
     * 构造函数，初始化EntityExistException对象
     *
     * @param clazz 实体类的Class对象，用于获取实体类名
     * @param field 实体类中的字段名，用于标识冲突的字段
     * @param val 字段的值，用于指定该字段的具体值
     */
    public EntityExistException(Class clazz, String field, String val) {
        super(EntityExistException.generateMessage(clazz.getSimpleName(), field, val));
    }

    /**
     * 生成异常消息的私有方法
     *
     * @param entity 实体类名，首字母会大写
     * @param field 实体类中的字段名
     * @param val 字段的值
     * @return 返回格式化的异常消息字符串
     */
    private static String generateMessage(String entity, String field, String val) {
        return StringUtils.capitalize(entity)
                + " with " + field + " "+ val + " existed";
    }
}
